#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
//int main() {
//	
//	int num = 0;
//	scanf("%d", &num);
//	int*ptr = (int*)malloc(num * sizeof(int));
//	if (ptr == NULL) {
//		return 1;
//	}
//	for (int i = 0;i < num;i++) {
//		scanf("%d", ptr + i);
//	}
//	for (int i = 0;i < num;i++) {
//		printf("%d ", *(ptr + i));
//	}
//	free(ptr);
//	ptr = NULL;
//	return 0;
//
//}
//int main() {
//	int num = 0;
//	scanf("%d", &num);
//	int* ptr = (int*)calloc(num ,sizeof(int));
//	free(p);
//	return 0;
//}
//int main() {
//	
//	int num = 0;
//	scanf("%d", &num);
//	int*ptr = (int*)calloc(num , sizeof(int));
//	if (ptr == NULL) {
//		return 1;
//	}
//	for (int i = 0;i < num;i++) {
//		printf("%d ", *(ptr + i));
//	}
//	int*ptrr=realloc(ptr, 40);
//	if (ptrr == NULL) {
//		return 1;
//	}
//	ptr = ptrr;
//	for (int i = 0;i < 10;i++) {
//		printf("%d ", *(ptr + i));
//	}
//	free(ptr);
//	ptr = NULL;
//	return 0;
//
//}
int main() {
	int r;
	scanf("%d", &r);
	int c;
	scanf("%d", &c);
	int cnt = 0;
	int* ptr = (int*)malloc(sizeof(int) * r * c);
	for (int i = 0;i < r;i++) {
		for (int j = 0;j < c;j++) {
			*(ptr + i * c + j) = cnt;
			cnt++;
		}
	}
	for (int i = 0;i < r;i++) {
		for (int j = 0;j < c;j++) {
			printf("%d ", *(ptr + i * c + j));
		}
		printf("\n");
	}
	return 0;
};